package com.ruoyi.basebill.service.impl;

import java.math.BigDecimal;
import java.util.List;

import com.alibaba.fastjson.JSONObject;
import com.ruoyi.basebill.DTO.GzffEntryInfo;
import com.ruoyi.basebill.DTO.GzffInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import com.ruoyi.common.utils.StringUtils;
import org.springframework.transaction.annotation.Transactional;
import com.ruoyi.basebill.domain.WfzGzffentry;
import com.ruoyi.basebill.mapper.WfzGzffMapper;
import com.ruoyi.basebill.domain.WfzGzff;
import com.ruoyi.basebill.service.IWfzGzffService;

/**
 * 工资发放Service业务层处理
 *
 * @author xiefeng
 * @date 2022-12-26
 */
@Service
public class WfzGzffServiceImpl implements IWfzGzffService
{
    @Autowired
    private WfzGzffMapper wfzGzffMapper;

    /**
     * 查询工资发放
     *
     * @param fid 工资发放主键
     * @return 工资发放
     */
    @Override
    public WfzGzff selectWfzGzffByFid(Long fid)
    {
        return wfzGzffMapper.selectWfzGzffByFid(fid);
    }

    /**
     * 查询工资发放列表
     *
     * @param wfzGzff 工资发放
     * @return 工资发放
     */
    @Override
    public List<WfzGzff> selectWfzGzffList(WfzGzff wfzGzff)
    {
        return wfzGzffMapper.selectWfzGzffList(wfzGzff);
    }

    /**
     * 新增工资发放
     *
     * @param wfzGzff 工资发放
     * @return 结果
     */
    @Transactional
    @Override
    public int insertWfzGzff(WfzGzff wfzGzff)
    {
        int rows = wfzGzffMapper.insertWfzGzff(wfzGzff);
        insertWfzGzffentry(wfzGzff);
        return rows;
    }

    /**
     * 修改工资发放
     *
     * @param wfzGzff 工资发放
     * @return 结果
     */
    @Transactional
    @Override
    public int updateWfzGzff(WfzGzff wfzGzff)
    {
        wfzGzffMapper.deleteWfzGzffentryByFparentid(wfzGzff.getFid());
        insertWfzGzffentry(wfzGzff);
        return wfzGzffMapper.updateWfzGzff(wfzGzff);
    }

    /**
     * 批量删除工资发放
     *
     * @param fids 需要删除的工资发放主键
     * @return 结果
     */
    @Transactional
    @Override
    public int deleteWfzGzffByFids(Long[] fids)
    {
        wfzGzffMapper.deleteWfzGzffentryByFparentids(fids);
        return wfzGzffMapper.deleteWfzGzffByFids(fids);
    }

    /**
     * 删除工资发放信息
     *
     * @param fid 工资发放主键
     * @return 结果
     */
    @Transactional
    @Override
    public int deleteWfzGzffByFid(Long fid)
    {
        wfzGzffMapper.deleteWfzGzffentryByFparentid(fid);
        return wfzGzffMapper.deleteWfzGzffByFid(fid);
    }

    @Override
    public String importGzff(WfzGzff wfzGzff) {
        GzffInfo gzffInfo = new GzffInfo();
        String fnumber = wfzGzff.getFnumber(); //单据编码
        String fcompany = wfzGzff.getFcompany(); //公司
        String fperiod = wfzGzff.getFperiod();//薪酬期间
        BigDecimal fzrs = wfzGzff.getFzrs(); //总人数
        BigDecimal fglf = wfzGzff.getFglf();  //关联方人数
        BigDecimal fnscbzxrs = wfzGzff.getFnscbzxrs();//合并纳税成本中心人数
        String fvourtype = wfzGzff.getFvourtype(); //凭证字


        gzffInfo.setNumber(fnumber);
        gzffInfo.setCompany(fcompany);
        gzffInfo.setPeriod(fperiod);
        gzffInfo.setZrs(fzrs);
        gzffInfo.setGlf(fglf);
        gzffInfo.setNscbzxrs(fnscbzxrs);
        gzffInfo.setVourType(fvourtype);
        gzffInfo.setSourcebillid(String.valueOf(wfzGzff.getFid()));

        List<WfzGzffentry> wfzGzffentryList = wfzGzff.getWfzGzffentryList();
        ArrayList<GzffEntryInfo> entry = new ArrayList<>();
        //组装分录数据
        for (int j=0;j<wfzGzffentryList.size();j++){
            WfzGzffentry wfzGzffentry = wfzGzffentryList.get(j);
            String fcostnumber = wfzGzffentry.getFcostnumber();//成本中心
            String fcostcompany = wfzGzffentry.getFcostcompany();//成本中心所属财务组织
            BigDecimal fyfgz = wfzGzffentry.getFyfgz();
            BigDecimal fgryl = wfzGzffentry.getFgryl(); //个人养老
            BigDecimal fgryy = wfzGzffentry.getFgryy();//个人医疗
            BigDecimal fgrsy = wfzGzffentry.getFgrsy(); //个人失业
            BigDecimal fgjj = wfzGzffentry.getFgjj();//公积金
            BigDecimal fgrgjj = wfzGzffentry.getFgrgjj();//个人公积金
            BigDecimal fbkgryl = wfzGzffentry.getFbkgryl();//补扣个人养老
            BigDecimal fbkgryy = wfzGzffentry.getFbkgryy();//补扣个人医疗
            BigDecimal fbkgrsy = wfzGzffentry.getFbkgrsy();//补扣个人失业
            BigDecimal fbkgrzf = wfzGzffentry.getFbkgrzf();//补扣个人住房
            BigDecimal fgrgfjf = wfzGzffentry.getFgrgfjf();//个人工费经费
            BigDecimal fjrfl = wfzGzffentry.getFjrfl();//节日福利
            BigDecimal fgwbnf = wfzGzffentry.getFgwbnf();//高温/保暖费
            BigDecimal ffhbfl = wfzGzffentry.getFfhbfl();//非货币性福利
            BigDecimal fsssdf = wfzGzffentry.getFsssdf();//代扣宿舍水电费
            BigDecimal fzkk = wfzGzffentry.getFzkk();//质扣款
            BigDecimal fgrsds = wfzGzffentry.getFgrsds();//个人所得税

            BigDecimal ffk = wfzGzffentry.getFfk();//罚款
            BigDecimal fsfhj = wfzGzffentry.getFsfhj();//实发合计
            String fyhzh = wfzGzffentry.getFyhzh();//银行账号
            String fjsfs = wfzGzffentry.getFjsfs();//组织间结算方式
            String fcbzxxz = wfzGzffentry.getFcbzxxz();//成本中心属性
            String fsscwzz = wfzGzffentry.getFsscwzz();//所属财务组织
            String fcbzxffjg = wfzGzffentry.getFcbzxffjg();
            String fvourtype1 = wfzGzffentry.getFvourtype();//凭证字

            GzffEntryInfo gzffEntryInfo = new GzffEntryInfo();
            gzffEntryInfo.setCostCenter(fcostnumber);
            gzffEntryInfo.setCostcompany(fcostcompany);
            gzffEntryInfo.setYfgz(fyfgz);
            gzffEntryInfo.setGryl(fgryl);
            gzffEntryInfo.setGryy(fgryy);
            gzffEntryInfo.setGrsy(fgrsy);
            gzffEntryInfo.setGrgfjf(fgrgfjf);
            gzffEntryInfo.setGjj(fgjj);
            gzffEntryInfo.setGrgjj(fgrgjj);
            gzffEntryInfo.setBkgryl(fbkgryl);
            gzffEntryInfo.setBkgryy(fbkgryy);
            gzffEntryInfo.setBkgrsy(fbkgrsy);
            gzffEntryInfo.setBkgrzf(fbkgrzf);
            gzffEntryInfo.setJrfl(fjrfl);
            gzffEntryInfo.setGwbnf(fgwbnf);

            gzffEntryInfo.setFhbfl(ffhbfl);
            gzffEntryInfo.setSssdf(fsssdf);
            gzffEntryInfo.setFk(ffk);
            gzffEntryInfo.setGrsds(fgrsds);
            gzffEntryInfo.setSfhj(fsfhj);
            gzffEntryInfo.setJsfs(fjsfs);
            gzffEntryInfo.setYhzh(fyhzh);
            gzffEntryInfo.setCbzxxz(fcbzxxz);
            gzffEntryInfo.setSscwzz(fsscwzz);
            gzffEntryInfo.setCbzxffjg(fcbzxffjg);
            gzffEntryInfo.setZkk(fzkk);
            gzffEntryInfo.setVourType(fvourtype1);
            entry.add(gzffEntryInfo);

        }

        gzffInfo.setEntry(entry);


        //转化为json
        String json = JSONObject.toJSONString(gzffInfo);

        return json;
    }

    /**
     * 新增工资发放单分录信息
     *
     * @param wfzGzff 工资发放对象
     */
    public void insertWfzGzffentry(WfzGzff wfzGzff)
    {
        List<WfzGzffentry> wfzGzffentryList = wfzGzff.getWfzGzffentryList();
        Long fid = wfzGzff.getFid();
        if (StringUtils.isNotNull(wfzGzffentryList))
        {
            List<WfzGzffentry> list = new ArrayList<WfzGzffentry>();
            for (WfzGzffentry wfzGzffentry : wfzGzffentryList)
            {
                wfzGzffentry.setFparentid(fid);
                list.add(wfzGzffentry);
            }
            if (list.size() > 0)
            {
                wfzGzffMapper.batchWfzGzffentry(list);
            }
        }
    }


}
